﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using LapvBussiness;
using log4net;
using System.Drawing.Drawing2D;
using System.Drawing;
using System.Text;
using LapvWebComponent;
using System.Web.Security;
using LapvBussiness.Common;
using System.Configuration;
using System.IO;
using MemcachedProviders.Cache;

namespace LapvWebM.Account
{
    public partial class Register : System.Web.UI.Page
    {
        public string domainStyle = ConfigLapv.Instance.DomainStyle;
        public string domain = ConfigLapv.Instance.DomainAdmin;

        private static readonly ILog log = LogManager.GetLogger(typeof(Register).Name);
        public string Captcha = string.Empty;
        public string ndqu = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack) return;
            if (Page.User.Identity.IsAuthenticated == true && SessionLogin.GetUsserId() > 0)
            {
                Response.Redirect("/Default.aspx");
            }
            Page.Title = "chamhoc.vn - Dang ky tai khoan";
            string breakCrumb = "";
            breakCrumb += "<li><a href=\"/Default.aspx\">Trang chủ</a> » </li>";
            breakCrumb += "<li class=\"active\">Đăng ký</li>";
            // ((Site)this.Page.Master).SiteMap = breakCrumb;

            imgCaptcha.ImageUrl = "rndimg.aspx";
            //   ((Site)this.Master).IsShow = false;

            try
            {
                DataBin();
                binQuan();
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                //((Site)this.Master).MessageError = "Quá trình lấy dữ liệu bị lỗi. " + ex.Message;
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {



            if (Page.User.Identity.IsAuthenticated == true && SessionLogin.GetUsserId() > 0)
            {
                Response.Redirect("/Default.aspx");
            }
            if (txtUserName.Text.Length < 6 || txtUserName.Text.Length > 50)
            {
                thongbao.Text = @"<script type='text/javascript'>errotb('Số ký tự của tên đăng nhập phải nhiều hơn 6 và ít hơn 16 ký tự');</script>";
                return;
            }
            if (txtPassword.Text.Length < 6 || txtPassword.Text.Length > 50)
            {
                thongbao.Text = @"<script type='text/javascript'>errotb('Số ký tự của mật khẩu phải nhiều hơn 6 và ít hơn 50 ký tự');</script>";
                return;
            }
            if (txtFullName.Text.Length < 1 || txtFullName.Text.Length > 32)
            {
                thongbao.Text = @"<script type='text/javascript'>errotb('Số ký tự của họ và tên phải ít hơn 32 ký tự');</script>";
                return;
            }

            if (txtAnswer.Text.Length < 1 || txtAnswer.Text.Length > 100)
            {
                thongbao.Text = @"<script type='text/javascript'>errotb('Số ký tự của câu trả lời bí mật phải ít hơn 100 ký tự');</script>";
                return;
            }

            if (Session["CaptcharTextSession"] != null && Session["CaptcharTextSession"].ToString().Equals(txtcheckcode.Text, StringComparison.OrdinalIgnoreCase))
            {
                if (chkDieuKhoan.Checked == false)
                {
                    thongbao.Text = @"<script type='text/javascript'>errotb('Trò phải đồng ý với các điều khoản');</script>";
                    return;
                }
                string uname = txtUserName.Text.Trim();
                if (string.IsNullOrEmpty(uname) || uname.Length < 6)
                {
                    // thongbao.Text = @"<script type='text/javascript'>errotb('Tên đăng nhập phải lớn hơn 6 ký tự');</script>";
                    return;
                }
                if (string.IsNullOrEmpty(txtPhone.Text))
                {
                    //   thongbao.Text = @"<script type='text/javascript'>errotb('Trò chưa điền số điện thoại phụ huynh');</script>";
                    return;
                }
                if (txtPhone.Text.Substring(0, 1) != "0")
                {
                    //   thongbao.Text = @"<script type='text/javascript'>errotb('Số điện thoại phụ huynh bắt đầu bằng số 0');</script>";
                    return;
                }
                bool loginok = false;

                try
                {
                    using (lapvwebEntities db = new lapvwebEntities())
                    {
                        if (db.accounts.Where(en => en.username == uname).Count() > 0)
                        {
                            //   thongbao.Text = @"<script type='text/javascript'>errotb('Đã tồn tại tài khoản này');</script>";
                            return;
                        }

                        account acount = new account();
                        acount.username = uname;
                        string pass = Utilities.GetMD5Hash(txtPassword.Text);
                        acount.password = pass;

                        acount.datecreate = DateTime.Now;
                        acount.cash = 0;
                        acount.lastname = Utilities.UpperCaseFirst(txtFullName.Text.Trim());
                        acount.status = 0;
                        acount.endlogin = DateTime.Now;
                        db.AddToaccounts(acount);
                        db.SaveChanges();
                        account_profile account_profile = new account_profile();


                        account_profile.mobile = txtPhone.Text.Trim();
                        account_profile.provinceid = int.Parse(ddlTinh.SelectedValue);
                        if (ddlQuestion.SelectedValue != null)
                            account_profile.questions = int.Parse(ddlQuestion.SelectedValue);
                        account_profile.answer = txtAnswer.Text.Trim();
                        account_profile.provincename = ddlTinh.SelectedItem.Text;
                        province provin = db.provinces.Where(en => en.id == account_profile.provinceid).FirstOrDefault();
                        if (provin != null) account_profile.region = provin.region;
                        account_profile.districid = int.Parse(ddlQuan.SelectedValue);
                        account_profile.districname = ddlQuan.SelectedItem.Text;


                        account_profile.accountReference.EntityKey = new System.Data.EntityKey("EducationEntities.account", "userid", acount.userid);

                        db.AddToaccount_profile(account_profile);
                        db.SaveChanges();
                        //private_message msg = new private_message();
                        //msg.touseridReference.EntityKey = new EntityKey("EducationEntities.account", "userid", acount.userid);
                        //msg.fromuserid = 0;
                        //msg.isread = false;
                        //msg.message = ConfigEdu.Instance.MsgRegistUser;
                        //msg.datecreate = DateTime.Now;
                        //db.AddToprivate_message(msg);
                        //db.SaveChanges();

                        //xu ly login
                        string errcode = "";
                        account obj = Provider.CheckLogin(txtUserName.Text, Utilities.GetMD5Hash(txtPassword.Text), out errcode, db);
                        if (obj != null)
                        {

                            FormsAuthentication.SetAuthCookie(txtUserName.Text, false);


                            Session["UserId"] = obj.userid;
                            Session["UserName"] = obj.username;
                            Session["Password"] = obj.password;
                            Session["Cash"] = obj.cash;
                            Session["ListGame"] = "";
                            if (!string.IsNullOrEmpty(obj.account_profile.avatar))
                                Session["Avatar"] = obj.account_profile.avatar;
                            else Session["Avatar"] = "ico_avatar.png";
                            //if (!string.IsNullOrEmpty(obj.fullname))
                            //    Session["FullName"] = obj.fullname;
                            //else Session["FullName"] = obj.username;
                            Session["ClassId"] = obj.account_profile.ClassId;
                            try
                            {
                                //add acc_log
                                account_log log = new account_log();
                                //log.userid = obj.userid;
                                //log.logdate = DateTime.Now;
                                //log.actiontype = 0;
                                //log.action = "Đăng nhập lần đầu";
                                log.ip = Request.UserHostName;
                                db.AddToaccount_log(log);
                                db.SaveChanges();
                            }
                            catch (Exception ex)
                            {
                                log.Error(ex.Message + "--" + ex.StackTrace + "--" + ex.Source);
                            }
                            loginok = true;
                        }
                        else
                        {
                            loginok = false;

                        }

                    }
                }
                catch (Exception ex)
                {
                    log.Error("Loi khi tao tài khoản", ex);
                    // ((Edu)this.Page.Master).MessageError = ex.Message;
                }
                if (loginok == true)
                {
                    Response.Redirect("~/page/PersonalPage.aspx#lstcurexam");
                }
                else
                {
                    // ((Edu)this.Page.Master).MessageError = "Trò đã đăng ký thành công, nhưng quá trình đăng nhập gặp lỗi.";
                    Response.Redirect("~/default.aspx");
                }
            }
            else
            {
                imgCaptcha.ImageUrl = "rndimg.aspx?v=" + DateTime.Now.ToString("ddMMyyyyhhmmss");
                //  thongbao.Text = @"<script type='text/javascript'>errotb('Mã xác nhận không đúng.');</script>";
            }

            //}
            //catch (Exception ex)
            //{
            //    log.Error("Loi khi tao tài khoản", ex);
            //    ((Edu)this.Page.Master).MessageError = ex.Message;

            //}

        }
        protected void imbReLoad_Click(object sender, ImageClickEventArgs e)
        {
            //CreateCaptcha();
            //rndimg.Src = "rndimg.aspx";
            imgCaptcha.ImageUrl = "rndimg.aspx?v=" + DateTime.Now.ToString("ddMMyyyyhhmmss");

        }
        private int RandomNumber(int min, int max)
        {
            Random random = new Random();
            return random.Next(min, max);
        }
        private void CreateCaptcha()
        {
            string[] fonts = { "Tahoma" };
            const byte LENGTH = 3;
            // chuỗi để lấy các kí tự sẽ sử dụng cho captcha
            const string chars = "0123456789";
            using (Bitmap bmp = new Bitmap(50, 15))
            {
                using (Graphics g = Graphics.FromImage(bmp))
                {
                    // Tạo nền cho ảnh dạng sóng
                    HatchBrush brush = new HatchBrush(HatchStyle.Wave, Color.White, Color.Wheat);
                    g.FillRegion(brush, g.Clip);
                    // Lưu chuỗi captcha trong quá trình tạo
                    StringBuilder strCaptcha = new StringBuilder();
                    Random rand = new Random();
                    for (int i = 0; i < LENGTH; i++)
                    {
                        // Lấy kí tự ngẫu nhiên từ mảng chars
                        string str = chars[rand.Next(chars.Length)].ToString();
                        strCaptcha.Append(str);
                        // Tạo font với tên font ngẫu nhiên chọn từ mảng fonts
                        Font font = new Font(fonts[rand.Next(fonts.Length)], 10, FontStyle.Bold | FontStyle.Bold);
                        // Lấy kích thước của kí tự
                        SizeF size = g.MeasureString(str, font);
                        // Vẽ kí tự đó ra ảnh tại vị trí tăng dần theo i, vị trí top ngẫu nhiên
                        g.DrawString(str, font,
                        Brushes.Chocolate, i * size.Width + 3, 0);//rand.Next(2, 10)
                        font.Dispose();
                    }
                    // Lưu captcha vào session
                    Session["captcha"] = strCaptcha.ToString().ToLower();
                    // Lưu ảnh vào thư mục captcha với tên ảnh dựa theo IP
                    //                    string path = "~/" + ConfigLapv.Instance.CAPCHA_FOLDER + Request.UserHostAddress + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Millisecond.ToString() + ".gif";
                    //                  bmp.Save(Server.MapPath(path), ImageFormat.Gif);

                    //imgCaptcha.ImageUrl = path;
                }
            }
        }

        protected void ddlTinh_SelectedIndexChanged(object sender, EventArgs e)
        {
            binQuan();
        }


        protected void binQuan()
        {
            int tinhID = int.Parse(ddlTinh.SelectedValue);
            if (tinhID > 0)
            {
                //List<district> listdistrict = Utilities.GetList<district>("CacheDistrict", () => Provider.GetListDistrict(tinhID), 1);
                //PlayGame.CreateHtmlTextWriterFromType
                List<district> listdistrict = Provider.GetListDistrict(tinhID);
                ddlQuan.DataSource = listdistrict;
                ddlQuan.DataTextField = "name";
                ddlQuan.DataValueField = "id";
                ddlQuan.DataBind();

            }

            else
            {
                ddlQuan.Items.Clear();
                //ddlQuan.DataBind();


            }
            ddlQuan.Items.Insert(0, new ListItem() { Text = "Chọn Quận/Huyện", Value = "0" });
            //ddlQuan.Items.Add(new ListItem(){Text="Chọn Quận/Huyện"}
        }
        public void DataBin()
        {
            List<province> lst = null;
            using (lapvwebEntities db = new lapvwebEntities())
            {
                string cachekey = "Province";
                object cached = null;
                try
                {
                    cached = DistCache.Get(cachekey);
                    log.Info("@@@@@@@@@READCACHE: " + cachekey);
                }
                catch (Exception)
                {
                }
                if (cached != null)
                {
                    lst = (List<province>)cached;
                }
                else
                {
                    //  lst = db.province.OrderByDescending(ec => ec.position).ToList();
                    try
                    {
                        DistCache.Add(cachekey, lst);
                        log.Info("$$$$$$$$$$CACHE: " + cachekey);
                    }
                    catch (Exception)
                    {
                    }
                }
                news n = db.news.Where(en => en.id == 46).FirstOrDefault();
                if (n != null)
                {
                    //noidungdk.InnerHtml = n.content;
                }
            }
            ddlTinh.DataSource = lst;
            ddlTinh.DataTextField = "name";
            ddlTinh.DataValueField = "id";
            ddlTinh.DataBind();

        }
        public string uploadImage(FileUpload fileup)
        {
            string folderImageAvata = "/" + ConfigurationManager.AppSettings["ImgQuestion"];
            string fileName = "";
            if (fileup.HasFile)
            {

                string ext = "";
                string key = DateTime.Now.Day.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString();
                string url = Path.GetFileName(fileup.FileName);
                ext = Utilities.getFileExtension(url);
                string imagefileextension = "jpg|gif|png|jpeg|bmp|swf|ico";
                if (imagefileextension.IndexOf(ext) < 0)
                {
                    return "";

                }
                fileup.SaveAs(Server.MapPath(folderImageAvata + key + fileup.FileName));

                fileName = key + fileup.FileName;

            }
            return fileName;
        }

    }
}